using System;
using UnityEngine;

#region Singleton<> second version
/// <summary>
/// 公用的单例类
/// </summary>
public abstract class Singleton_UI<T> where T : class, new()
{
    protected static T _Instance = null;

    public static T Instance
    {
        get
        {
            if (null == _Instance)
            {
                _Instance = new T();
            }
            return _Instance;
        }
    }

    public static T instance
    {
        get
        {
            if (null == _Instance)
            {
                _Instance = new T();
            }
            return _Instance;
        }
    }

    /// <summary>
    /// 构造方法，如果实例不为空，抛出异常
    /// </summary>
    protected Singleton_UI()
    {
        if (null != _Instance)
            throw new SingletonException("This " + (typeof(T)).ToString() + " Singleton Instance is not null !!!");
        Init();
    }


    /// <summary></summary>
    /// 提供一个初始化的函数,可按需要复写
    /// </summary>
    public virtual void Init() { }
}
#endregion


/// 访问修饰符 说明 
/// public    公有访问。不受任何限制。 
/// private   私有访问。只限于本类成员访问，子类，实例都不能访问。 
/// protected 保护访问。只限于本类和子类访问，实例不能访问。 
/// internal  内部访问。只限于本项目内访问，其他不能访问。 
/// protected internal 内部保护访问。只限于本项目或是子类访问，其他不能访问

